--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / backend / map_overlay_manager.py
Displaying Raw • Download
meshchatx/src/backend/map_overlay_manager.py a96697b9a554c7ae068fb1b4a2bd19f34f918ce3 (a96697b9) Text, 31.82 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Manage remote map overlay sources: fetch, cache, refresh, export."""
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787asyncio
Tff7b72import T7ee787hashlib
Tff7b72import T7ee787logging
Tff7b72import T7ee787os
Tff7b72import T7ee787random
Tff7b72import T7ee787re
Tff7b72import T7ee787shutil
Tff7b72import T7ee787uuid
Tff7b72from T7ee787datetime Tff7b72import Te6edf3UTCTb4b4b4, Te6edf3datetimeTb4b4b4, Te6edf3timedelta
Tff7b72from T7ee787typing Tff7b72import Te6edf3Any
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787map_geo_validator Tff7b72import Tb4b4b4(
Te6edf3GeoValidationErrorTb4b4b4,
Te6edf3validate_geo_bytesTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787map_overlay_export Tff7b72import Tb4b4b4(
Te6edf3CONTENT_TYPESTb4b4b4,
Te6edf3EXTENSIONSTb4b4b4,
Te6edf3OverlayExportErrorTb4b4b4,
Te6edf3convert_overlay_bytesTb4b4b4,
Te6edf3from_geojsonTb4b4b4,
Te6edf3merge_geojson_bytesTb4b4b4,
Te6edf3to_geojsonTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787map_overlay_sources Tff7b72import Tb4b4b4(
Te6edf3KIND_NOMADNET_FILETb4b4b4,
Te6edf3KIND_RNGIT_FILESTb4b4b4,
Te6edf3OverlaySourceParseErrorTb4b4b4,
Te6edf3OverlaySourceSpecTb4b4b4,
Te6edf3guess_format_from_pathTb4b4b4,
Te6edf3parse_create_payloadTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787nomadnet_downloader Tff7b72import Te6edf3NomadnetFileDownloader
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787rngit_sparse_fetcher Tff7b72import Tb4b4b4(
Te6edf3RngitFetchErrorTb4b4b4,
Te6edf3RngitSparseFetcherTb4b4b4,
Tb4b4b4)
Te6edf3_log Tff7b72= Te6edf3loggingTff7b72.Td2a8ffgetLoggerTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.map_overlaysTa5d6ff"Tb4b4b4)
Te6edf3_SAFE_NAME_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff[^A-Za-z0-9._-]+Ta5d6ff"Tb4b4b4)
Te6edf3CONFIG_CLAMPS Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffmap_overlay_max_bytesTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff64 Tff7b72* T79c0ff1024Tb4b4b4, T79c0ff64 Tff7b72* T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffmap_overlay_max_featuresTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff100Tb4b4b4, T79c0ff500_000Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffmap_overlay_max_kmz_uncompressed_bytesTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff256 Tff7b72* T79c0ff1024Tb4b4b4, T79c0ff128 Tff7b72* T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffmap_overlay_max_sourcesTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff1Tb4b4b4, T79c0ff256Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffmap_overlay_max_concurrent_jobsTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff1Tb4b4b4, T79c0ff8Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffmap_overlay_path_timeout_secondsTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff5Tb4b4b4, T79c0ff300Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffmap_overlay_transfer_timeout_secondsTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff15Tb4b4b4, T79c0ff600Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffmap_overlay_job_timeout_secondsTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff30Tb4b4b4, T79c0ff1800Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffmap_overlay_max_retriesTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff0Tb4b4b4, T79c0ff10Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffmap_overlay_retry_delay_secondsTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff1Tb4b4b4, T79c0ff120Tb4b4b4)Tb4b4b4,
Tb4b4b4}
Tff7b72def Td2a8ffclamp_overlay_config_valueTb4b4b4(Te6edf3keyTb4b4b4: Tffa657strTb4b4b4, Te6edf3valueTb4b4b4: Tffa657intTb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
Te6edf3loTb4b4b4, Te6edf3hi Tff7b72= Te6edf3CONFIG_CLAMPSTb4b4b4[Te6edf3keyTb4b4b4]
Tff7b72return Tffa657maxTb4b4b4(Te6edf3loTb4b4b4, Tffa657minTb4b4b4(Te6edf3hiTb4b4b4, Tffa657intTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffatomic_write_bytesTb4b4b4(Te6edf3pathTb4b4b4: Tffa657strTb4b4b4, Te6edf3dataTb4b4b4: Tffa657bytesTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3parent Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Te6edf3pathTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3parentTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3tmp Tff7b72= Te6edf3path Tff7b72+ Ta5d6ff"Ta5d6ff.tmpTa5d6ff"
Tff7b72with Tffa657openTb4b4b4(Te6edf3tmpTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3dataTb4b4b4)
Te6edf3fTff7b72.Td2a8ffflushTb4b4b4(Tb4b4b4)
Te6edf3osTff7b72.Td2a8fffsyncTb4b4b4(Te6edf3fTff7b72.Td2a8fffilenoTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffreplaceTb4b4b4(Te6edf3tmpTb4b4b4, Te6edf3pathTb4b4b4)
Tff7b72def Td2a8ff_safe_filenameTb4b4b4(Te6edf3nameTb4b4b4: Tffa657strTb4b4b4, Te6edf3extTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3base Tff7b72= Te6edf3_SAFE_NAME_RETff7b72.Td2a8ffsubTb4b4b4(Ta5d6ff"Ta5d6ff_Ta5d6ff"Tb4b4b4, Tb4b4b4(Te6edf3name Tff7b72or Ta5d6ff"Ta5d6ffoverlayTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4[Tb4b4b4:T79c0ff80Tb4b4b4] Tff7b72or Ta5d6ff"Ta5d6ffoverlayTa5d6ff"
Tff7b72if Tff7b72not Te6edf3extTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3ext Tff7b72= Ta5d6ff"Ta5d6ff.Ta5d6ff" Tff7b72+ Te6edf3ext
Tff7b72return Te6edf3base Tff7b72+ Te6edf3ext
Tff7b72def Td2a8ff_row_to_dictTb4b4b4(Te6edf3rowTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72if Te6edf3row Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tb4b4b4{Tb4b4b4}
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3rowTb4b4b4, Ta5d6ff"Ta5d6ffkeysTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4{Te6edf3kTb4b4b4: Te6edf3rowTb4b4b4[Te6edf3kTb4b4b4] Tff7b72for Te6edf3k Tff7b72in Te6edf3rowTff7b72.Td2a8ffkeysTb4b4b4(Tb4b4b4)Tb4b4b4}
Tff7b72return Tffa657dictTb4b4b4(Te6edf3rowTb4b4b4)
Tff7b72class T56d364MapOverlayManagerTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3configTb4b4b4,
Te6edf3databaseTb4b4b4,
Te6edf3storage_dirTb4b4b4: Tffa657strTb4b4b4,
Tff7b72*Tb4b4b4,
Te6edf3reticulum_config_dirTb4b4b4: Tffa657str Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3identityTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3reticulumTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3file_downloader_factoryTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3rngit_fetcher_factoryTff7b72=Tff7b72NoneTb4b4b4,
Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfig Tff7b72= Te6edf3config
Tff7b72selfTff7b72.Td2a8ffdatabase Tff7b72= Te6edf3database
Tff7b72selfTff7b72.Td2a8ffstorage_dir Tff7b72= Te6edf3storage_dir
Tff7b72selfTff7b72.Td2a8ffreticulum_config_dir Tff7b72= Te6edf3reticulum_config_dir
Tff7b72selfTff7b72.Td2a8ffidentity Tff7b72= Te6edf3identity
Tff7b72selfTff7b72.Td2a8ffreticulum Tff7b72= Te6edf3reticulum
Tff7b72selfTff7b72.Td2a8ff_file_downloader_factory Tff7b72= Tb4b4b4(
Te6edf3file_downloader_factory Tff7b72or Tff7b72selfTff7b72.Td2a8ff_default_file_downloader_factory
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_rngit_fetcher_factory Tff7b72= Tb4b4b4(
Te6edf3rngit_fetcher_factory Tff7b72or Tff7b72selfTff7b72.Td2a8ff_default_rngit_fetcher_factory
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_jobsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4] Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ff_source_locksTb4b4b4: Tffa657dictTb4b4b4[Tffa657intTb4b4b4, Te6edf3asyncioTff7b72.Td2a8ffLockTb4b4b4] Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ff_active_fetchersTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ff_job_semaphoreTb4b4b4: Te6edf3asyncioTff7b72.Td2a8ffSemaphore Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_scheduler_taskTb4b4b4: Te6edf3asyncioTff7b72.Td2a8ffTask Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_stopped Tff7b72= Tff7b72False
Tff7b72def Td2a8ffoverlay_rootTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstorage_dirTb4b4b4, Ta5d6ff"Ta5d6ffmap_overlaysTa5d6ff"Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72return Te6edf3path
Tff7b72def Td2a8ffwork_rootTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffoverlay_rootTb4b4b4(Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff.workTa5d6ff"Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72return Te6edf3path
Tff7b72def Td2a8ffcache_path_forTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4,
Te6edf3overlay_idTb4b4b4: Tffa657intTb4b4b4,
Te6edf3fmtTb4b4b4: Tffa657strTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657tupleTb4b4b4[Tffa657strTb4b4b4, Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3rel Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3identity_hashTb4b4b4, Ta5d6fffTa5d6ff"Tffd700{Te6edf3overlay_idTffd700}Ta5d6ff.Tffd700{Te6edf3fmtTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72return Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffoverlay_rootTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3relTb4b4b4)Tb4b4b4, Te6edf3rel
Tff7b72def Td2a8ff_cfg_intTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3keyTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
Te6edf3conf Tff7b72= Tffa657getattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4, Te6edf3keyTb4b4b4)
Te6edf3raw Tff7b72= Te6edf3confTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3clamp_overlay_config_valueTb4b4b4(Te6edf3keyTb4b4b4, Tffa657intTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fflimitsTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Tffa657intTb4b4b4]Tb4b4b4:
Tff7b72return Tb4b4b4{Te6edf3kTb4b4b4: Tff7b72selfTff7b72.Td2a8ff_cfg_intTb4b4b4(Te6edf3kTb4b4b4) Tff7b72for Te6edf3k Tff7b72in Te6edf3CONFIG_CLAMPSTb4b4b4}
Tff7b72def Td2a8ff_source_lockTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3overlay_idTb4b4b4: Tffa657intTb4b4b4) Tff7b72-Tff7b72> Te6edf3asyncioTff7b72.Td2a8ffLockTb4b4b4:
Te6edf3lock Tff7b72= Tff7b72selfTff7b72.Td2a8ff_source_locksTff7b72.Td2a8ffgetTb4b4b4(Te6edf3overlay_idTb4b4b4)
Tff7b72if Te6edf3lock Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3lock Tff7b72= Te6edf3asyncioTff7b72.Td2a8ffLockTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_source_locksTb4b4b4[Te6edf3overlay_idTb4b4b4] Tff7b72= Te6edf3lock
Tff7b72return Te6edf3lock
Tff7b72def Td2a8ff_default_file_downloader_factoryTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3NomadnetFileDownloaderTb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72def Td2a8ff_default_rngit_fetcher_factoryTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3RngitSparseFetcherTb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72def Td2a8ffstart_schedulerTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_scheduler_task Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return
Tff7b72selfTff7b72.Td2a8ff_stopped Tff7b72= Tff7b72False
Tff7b72tryTb4b4b4:
Te6edf3loop Tff7b72= Te6edf3asyncioTff7b72.Td2a8ffget_running_loopTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149RuntimeErrorTb4b4b4:
Tff7b72return
Tff7b72selfTff7b72.Td2a8ff_scheduler_task Tff7b72= Te6edf3loopTff7b72.Td2a8ffcreate_taskTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_autorefresh_loopTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffstop_schedulerTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_stopped Tff7b72= Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_scheduler_task Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_scheduler_taskTff7b72.Td2a8ffcancelTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_scheduler_task Tff7b72= Tff7b72None
Tff7b72for Te6edf3fetcher Tff7b72in Tffa657listTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_active_fetchersTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3fetcherTff7b72.Td2a8ffcancelTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72async Tff7b72def Td2a8ff_autorefresh_loopTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72while Tff7b72not Tff7b72selfTff7b72.Td2a8ff_stoppedTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72await Tff7b72selfTff7b72.Td2a8ff_tick_autorefreshTb4b4b4(Tb4b4b4)
Tff7b72except Te6edf3asyncioTff7b72.Td2a8ffCancelledErrorTb4b4b4:
Tff7b72raise
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3_logTff7b72.Td2a8ffexceptionTb4b4b4(Ta5d6ff"Ta5d6ffmap overlay autorefresh tick failedTa5d6ff"Tb4b4b4)
Tff7b72await Te6edf3asyncioTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff15Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ff_tick_autorefreshTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3now Tff7b72= Te6edf3datetimeTff7b72.Td2a8ffnowTb4b4b4(Te6edf3UTCTb4b4b4)Tff7b72.Td2a8ffisoformatTb4b4b4(Tb4b4b4)
Te6edf3rows Tff7b72= Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8fflist_due_autorefreshTb4b4b4(Te6edf3nowTb4b4b4)
Tff7b72for Te6edf3row Tff7b72in Te6edf3rowsTb4b4b4:
Te6edf3overlay_id Tff7b72= Tffa657intTb4b4b4(Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3identity_hash Tff7b72= Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffidentity_hashTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_source_lockTb4b4b4(Te6edf3overlay_idTb4b4b4)Tff7b72.Td2a8fflockedTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72tryTb4b4b4:
Tff7b72await Tff7b72selfTff7b72.Td2a8ffrefresh_overlayTb4b4b4(
Te6edf3identity_hashTb4b4b4,
Te6edf3overlay_idTb4b4b4,
Te6edf3reasonTff7b72=Ta5d6ff"Ta5d6ffautorefreshTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3_logTff7b72.Td2a8ffexceptionTb4b4b4(Ta5d6ff"Ta5d6ffautorefresh failed for overlay Tffd700%sTa5d6ff"Tb4b4b4, Te6edf3overlay_idTb4b4b4)
Tff7b72def Td2a8fflist_overlaysTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4]Tb4b4b4:
Te6edf3rows Tff7b72= Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8fflist_for_identityTb4b4b4(Te6edf3identity_hashTb4b4b4)
Tff7b72return Tb4b4b4[Te6edf3_row_to_dictTb4b4b4(Te6edf3rTb4b4b4) Tff7b72for Te6edf3r Tff7b72in Te6edf3rowsTb4b4b4]
Tff7b72def Td2a8ffget_overlayTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4, Te6edf3overlay_idTb4b4b4: Tffa657intTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3row Tff7b72= Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8ffget_by_idTb4b4b4(Te6edf3overlay_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3row Tff7b72or Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffidentity_hashTa5d6ff"Tb4b4b4] Tff7b72!= Te6edf3identity_hashTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Te6edf3_row_to_dictTb4b4b4(Te6edf3rowTb4b4b4)
Tff7b72def Td2a8ffget_jobTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3job_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3identity_hashTb4b4b4: Tffa657str Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3job Tff7b72= Tff7b72selfTff7b72.Td2a8ff_jobsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3job_idTb4b4b4)
Tff7b72if Te6edf3job Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72if Te6edf3identity_hash Tff7b72is Tff7b72not Tff7b72None Tff7b72and Te6edf3jobTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffidentity_hashTa5d6ff"Tb4b4b4) Tff7b72!= Te6edf3identity_hashTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Te6edf3job
Tff7b72async Tff7b72def Td2a8ffcreate_overlaysTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4,
Te6edf3payloadTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Te6edf3specs Tff7b72= Te6edf3parse_create_payloadTb4b4b4(Te6edf3payloadTb4b4b4)
Te6edf3max_sources Tff7b72= Tff7b72selfTff7b72.Td2a8ff_cfg_intTb4b4b4(Ta5d6ff"Ta5d6ffmap_overlay_max_sourcesTa5d6ff"Tb4b4b4)
Te6edf3current Tff7b72= Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8ffcount_for_identityTb4b4b4(Te6edf3identity_hashTb4b4b4)
Tff7b72if Te6edf3current Tff7b72+ Tffa657lenTb4b4b4(Te6edf3specsTb4b4b4) Tff7b72> Te6edf3max_sourcesTb4b4b4:
Tff7b72raise Te6edf3OverlaySourceParseErrorTb4b4b4(Ta5d6ff"Ta5d6ffmax_sources_exceededTa5d6ff"Tb4b4b4)
Te6edf3created_idsTb4b4b4: Tffa657listTb4b4b4[Tffa657intTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3spec Tff7b72in Te6edf3specsTb4b4b4:
Te6edf3existing Tff7b72= Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8ffget_by_uniqueTb4b4b4(
Te6edf3identity_hashTb4b4b4,
Te6edf3specTff7b72.Td2a8ffkindTb4b4b4,
Te6edf3specTff7b72.Td2a8ffdestination_hashTb4b4b4,
Te6edf3specTff7b72.Td2a8ffpath_or_repo_pathTb4b4b4,
Te6edf3specTff7b72.Td2a8ffrefTb4b4b4,
Tb4b4b4)
Tff7b72if Te6edf3existingTb4b4b4:
Te6edf3created_idsTff7b72.Td2a8ffappendTb4b4b4(Tffa657intTb4b4b4(Te6edf3existingTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72continue
Te6edf3oid Tff7b72= Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8ffinsertTb4b4b4(
Te6edf3identity_hashTb4b4b4,
Te6edf3kindTff7b72=Te6edf3specTff7b72.Td2a8ffkindTb4b4b4,
Te6edf3destination_hashTff7b72=Te6edf3specTff7b72.Td2a8ffdestination_hashTb4b4b4,
Te6edf3path_or_repo_pathTff7b72=Te6edf3specTff7b72.Td2a8ffpath_or_repo_pathTb4b4b4,
Te6edf3refTff7b72=Te6edf3specTff7b72.Td2a8ffrefTb4b4b4,
Te6edf3nameTff7b72=Te6edf3specTff7b72.Td2a8ffname Tff7b72or Ta5d6ff"Ta5d6ffoverlayTa5d6ff"Tb4b4b4,
Te6edf3group_nameTff7b72=Te6edf3specTff7b72.Td2a8ffgroup_nameTb4b4b4,
Te6edf3repositoryTff7b72=Te6edf3specTff7b72.Td2a8ffrepositoryTb4b4b4,
Te6edf3refresh_interval_secondsTff7b72=Te6edf3specTff7b72.Td2a8ffrefresh_interval_secondsTb4b4b4,
Te6edf3statusTff7b72=Ta5d6ff"Ta5d6ffpendingTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3created_idsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3oidTb4b4b4)
Te6edf3job_id Tff7b72= Tff7b72await Tff7b72selfTff7b72.Td2a8ff_start_job_for_idsTb4b4b4(Te6edf3identity_hashTb4b4b4, Te6edf3created_idsTb4b4b4, Te6edf3specsTb4b4b4)
Te6edf3overlays Tff7b72= Tb4b4b4[Tff7b72selfTff7b72.Td2a8ffget_overlayTb4b4b4(Te6edf3identity_hashTb4b4b4, Te6edf3iTb4b4b4) Tff7b72for Te6edf3i Tff7b72in Te6edf3created_idsTb4b4b4]
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffjob_idTa5d6ff"Tb4b4b4: Te6edf3job_idTb4b4b4, Ta5d6ff"Ta5d6ffoverlaysTa5d6ff"Tb4b4b4: Te6edf3overlaysTb4b4b4}
Tff7b72async Tff7b72def Td2a8ffrefresh_overlayTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4,
Te6edf3overlay_idTb4b4b4: Tffa657intTb4b4b4,
Tff7b72*Tb4b4b4,
Te6edf3reasonTb4b4b4: Tffa657str Tff7b72= Ta5d6ff"Ta5d6ffmanualTa5d6ff"Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Te6edf3row Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_overlayTb4b4b4(Te6edf3identity_hashTb4b4b4, Te6edf3overlay_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3rowTb4b4b4:
Tff7b72raise Te6edf3OverlaySourceParseErrorTb4b4b4(Ta5d6ff"Ta5d6ffnot_foundTa5d6ff"Tb4b4b4)
Te6edf3spec Tff7b72= Te6edf3OverlaySourceSpecTb4b4b4(
Te6edf3kindTff7b72=Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffkindTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3destination_hashTff7b72=Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3path_or_repo_pathTff7b72=Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffpath_or_repo_pathTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3refTff7b72=Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffrefTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffHEADTa5d6ff"Tb4b4b4,
Te6edf3group_nameTff7b72=Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffgroup_nameTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3repositoryTff7b72=Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffrepositoryTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3nameTff7b72=Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3pathsTff7b72=Tb4b4b4[Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffpath_or_repo_pathTa5d6ff"Tb4b4b4]Tb4b4b4]Tb4b4b4,
Te6edf3refresh_interval_secondsTff7b72=Tffa657intTb4b4b4(Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffrefresh_interval_secondsTa5d6ff"Tb4b4b4) Tff7b72or T79c0ff0Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3job_id Tff7b72= Tff7b72await Tff7b72selfTff7b72.Td2a8ff_start_job_for_idsTb4b4b4(Te6edf3identity_hashTb4b4b4, Tb4b4b4[Te6edf3overlay_idTb4b4b4]Tb4b4b4, Tb4b4b4[Te6edf3specTb4b4b4]Tb4b4b4)
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffjob_idTa5d6ff"Tb4b4b4: Te6edf3job_idTb4b4b4,
Ta5d6ff"Ta5d6ffoverlayTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffget_overlayTb4b4b4(Te6edf3identity_hashTb4b4b4, Te6edf3overlay_idTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffreasonTa5d6ff"Tb4b4b4: Te6edf3reasonTb4b4b4,
Tb4b4b4}
Tff7b72async Tff7b72def Td2a8ff_start_job_for_idsTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4,
Te6edf3overlay_idsTb4b4b4: Tffa657listTb4b4b4[Tffa657intTb4b4b4]Tb4b4b4,
Te6edf3specsTb4b4b4: Tffa657listTb4b4b4[Te6edf3OverlaySourceSpecTb4b4b4]Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3job_id Tff7b72= Te6edf3uuidTff7b72.Td2a8ffuuid4Tb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffhex
Te6edf3generationsTb4b4b4: Tffa657dictTb4b4b4[Tffa657intTb4b4b4, Tffa657intTb4b4b4] Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72for Te6edf3oid Tff7b72in Te6edf3overlay_idsTb4b4b4:
Te6edf3row Tff7b72= Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8ffget_by_idTb4b4b4(Te6edf3oidTb4b4b4)
Te6edf3gen Tff7b72= Tffa657intTb4b4b4(Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffgenerationTa5d6ff"Tb4b4b4] Tff7b72or T79c0ff0Tb4b4b4) Tff7b72+ T79c0ff1 Tff7b72if Te6edf3row Tff7b72else T79c0ff1
Te6edf3generationsTb4b4b4[Te6edf3oidTb4b4b4] Tff7b72= Te6edf3gen
Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8ffupdate_fieldsTb4b4b4(
Te6edf3oidTb4b4b4,
Te6edf3statusTff7b72=Ta5d6ff"Ta5d6fffetchingTa5d6ff"Tb4b4b4,
Te6edf3last_errorTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3job_idTff7b72=Te6edf3job_idTb4b4b4,
Te6edf3generationTff7b72=Te6edf3genTb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_jobsTb4b4b4[Te6edf3job_idTb4b4b4] Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffjob_idTa5d6ff"Tb4b4b4: Te6edf3job_idTb4b4b4,
Ta5d6ff"Ta5d6ffidentity_hashTa5d6ff"Tb4b4b4: Te6edf3identity_hashTb4b4b4,
Ta5d6ff"Ta5d6ffoverlay_idsTa5d6ff"Tb4b4b4: Tffa657listTb4b4b4(Te6edf3overlay_idsTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffrunningTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffphaseTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffqueuedTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffprogressTa5d6ff"Tb4b4b4: T79c0ff0.0Tb4b4b4,
Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Ta5d6ff"Ta5d6ffcreated_atTa5d6ff"Tb4b4b4: Te6edf3datetimeTff7b72.Td2a8ffnowTb4b4b4(Te6edf3UTCTb4b4b4)Tff7b72.Td2a8ffisoformatTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4}
Tff7b72async Tff7b72def Td2a8ffrunnerTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72await Tff7b72selfTff7b72.Td2a8ff_run_jobTb4b4b4(
Te6edf3job_idTb4b4b4,
Te6edf3identity_hashTb4b4b4,
Te6edf3overlay_idsTb4b4b4,
Te6edf3specsTb4b4b4,
Te6edf3generationsTb4b4b4,
Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Te6edf3_logTff7b72.Td2a8ffexceptionTb4b4b4(Ta5d6ff"Ta5d6ffoverlay job Tffd700%sTa5d6ff failedTa5d6ff"Tb4b4b4, Te6edf3job_idTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_jobsTb4b4b4[Te6edf3job_idTb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fferrorTa5d6ff"
Tff7b72selfTff7b72.Td2a8ff_jobsTb4b4b4[Te6edf3job_idTb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4] Tff7b72= Tffa657strTb4b4b4(Te6edf3excTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3loop Tff7b72= Te6edf3asyncioTff7b72.Td2a8ffget_running_loopTb4b4b4(Tb4b4b4)
Te6edf3loopTff7b72.Td2a8ffcreate_taskTb4b4b4(Te6edf3runnerTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72except Tf85149RuntimeErrorTb4b4b4:
Tff7b72await Te6edf3runnerTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3job_id
Tff7b72async Tff7b72def Td2a8ff_run_jobTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3job_idTb4b4b4: Tffa657strTb4b4b4,
Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4,
Te6edf3overlay_idsTb4b4b4: Tffa657listTb4b4b4[Tffa657intTb4b4b4]Tb4b4b4,
Te6edf3specsTb4b4b4: Tffa657listTb4b4b4[Te6edf3OverlaySourceSpecTb4b4b4]Tb4b4b4,
Te6edf3generationsTb4b4b4: Tffa657dictTb4b4b4[Tffa657intTb4b4b4, Tffa657intTb4b4b4]Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3max_conc Tff7b72= Tff7b72selfTff7b72.Td2a8ff_cfg_intTb4b4b4(Ta5d6ff"Ta5d6ffmap_overlay_max_concurrent_jobsTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_job_semaphore Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_job_semaphore Tff7b72= Te6edf3asyncioTff7b72.Td2a8ffSemaphoreTb4b4b4(Te6edf3max_concTb4b4b4)
T8b949e# Resize not supported mid-flight. Create a new semaphore if limit changed and idle.
Tff7b72async Tff7b72with Tff7b72selfTff7b72.Td2a8ff_job_semaphoreTb4b4b4:
Te6edf3job Tff7b72= Tff7b72selfTff7b72.Td2a8ff_jobsTb4b4b4[Te6edf3job_idTb4b4b4]
Tff7b72tryTb4b4b4:
Te6edf3kind Tff7b72= Te6edf3specsTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffkind Tff7b72if Te6edf3specs Tff7b72else Tff7b72None
Tff7b72if Te6edf3kind Tff7b72== Te6edf3KIND_NOMADNET_FILETb4b4b4:
Tff7b72await Tff7b72selfTff7b72.Td2a8ff_fetch_nomadnet_jobTb4b4b4(
Te6edf3job_idTb4b4b4,
Te6edf3identity_hashTb4b4b4,
Te6edf3overlay_idsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4,
Te6edf3specsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4,
Te6edf3generationsTb4b4b4[Te6edf3overlay_idsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72elif Te6edf3kind Tff7b72== Te6edf3KIND_RNGIT_FILESTb4b4b4:
Tff7b72await Tff7b72selfTff7b72.Td2a8ff_fetch_rngit_jobTb4b4b4(
Te6edf3job_idTb4b4b4,
Te6edf3identity_hashTb4b4b4,
Te6edf3overlay_idsTb4b4b4,
Te6edf3specsTb4b4b4,
Te6edf3generationsTb4b4b4,
Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72raise Te6edf3OverlaySourceParseErrorTb4b4b4(Ta5d6ff"Ta5d6ffunsupported_kindTa5d6ff"Tb4b4b4)
Te6edf3jobTb4b4b4[Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffsuccessTa5d6ff"
Te6edf3jobTb4b4b4[Ta5d6ff"Ta5d6ffphaseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffdoneTa5d6ff"
Te6edf3jobTb4b4b4[Ta5d6ff"Ta5d6ffprogressTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff1.0
Tff7b72except Te6edf3asyncioTff7b72.Td2a8ffCancelledErrorTb4b4b4:
Te6edf3jobTb4b4b4[Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffcancelledTa5d6ff"
Te6edf3jobTb4b4b4[Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffcancelledTa5d6ff"
Tff7b72raise
Tff7b72except Tb4b4b4(
Te6edf3OverlaySourceParseErrorTb4b4b4,
Te6edf3GeoValidationErrorTb4b4b4,
Te6edf3RngitFetchErrorTb4b4b4,
Tb4b4b4) Tff7b72as Te6edf3excTb4b4b4:
Te6edf3code Tff7b72= Tffa657getattrTb4b4b4(Te6edf3excTb4b4b4, Ta5d6ff"Ta5d6ffcodeTa5d6ff"Tb4b4b4, Tffa657strTb4b4b4(Te6edf3excTb4b4b4)Tb4b4b4)
Te6edf3jobTb4b4b4[Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fferrorTa5d6ff"
Te6edf3jobTb4b4b4[Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3code
Tff7b72for Te6edf3oid Tff7b72in Te6edf3overlay_idsTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_generation_currentTb4b4b4(Te6edf3oidTb4b4b4, Te6edf3generationsTb4b4b4[Te6edf3oidTb4b4b4]Tb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72selfTff7b72.Td2a8ff_mark_errorTb4b4b4(Te6edf3oidTb4b4b4, Te6edf3codeTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Te6edf3jobTb4b4b4[Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fferrorTa5d6ff"
Te6edf3jobTb4b4b4[Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4] Tff7b72= Tffa657strTb4b4b4(Te6edf3excTb4b4b4)
Tff7b72for Te6edf3oid Tff7b72in Te6edf3overlay_idsTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_generation_currentTb4b4b4(Te6edf3oidTb4b4b4, Te6edf3generationsTb4b4b4[Te6edf3oidTb4b4b4]Tb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72selfTff7b72.Td2a8ff_mark_errorTb4b4b4(Te6edf3oidTb4b4b4, Ta5d6ff"Ta5d6fffetch_failedTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_generation_currentTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3overlay_idTb4b4b4: Tffa657intTb4b4b4, Te6edf3generationTb4b4b4: Tffa657intTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3row Tff7b72= Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8ffget_by_idTb4b4b4(Te6edf3overlay_idTb4b4b4)
Tff7b72return Tffa657boolTb4b4b4(Te6edf3rowTb4b4b4) Tff7b72and Tffa657intTb4b4b4(Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffgenerationTa5d6ff"Tb4b4b4] Tff7b72or T79c0ff0Tb4b4b4) Tff7b72== Te6edf3generation
Tff7b72def Td2a8ff_mark_errorTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3overlay_idTb4b4b4: Tffa657intTb4b4b4, Te6edf3codeTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3row Tff7b72= Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8ffget_by_idTb4b4b4(Te6edf3overlay_idTb4b4b4)
Te6edf3interval Tff7b72= Tffa657intTb4b4b4(Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffrefresh_interval_secondsTa5d6ff"Tb4b4b4] Tff7b72or T79c0ff0Tb4b4b4) Tff7b72if Te6edf3row Tff7b72else T79c0ff0
Te6edf3next_at Tff7b72= Tff7b72None
Tff7b72if Te6edf3interval Tff7b72> T79c0ff0Tb4b4b4:
T8b949e# backoff after failure: at least interval
Te6edf3next_at Tff7b72= Tb4b4b4(Te6edf3datetimeTff7b72.Td2a8ffnowTb4b4b4(Te6edf3UTCTb4b4b4) Tff7b72+ Te6edf3timedeltaTb4b4b4(Te6edf3secondsTff7b72=Te6edf3intervalTb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffisoformatTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8ffupdate_fieldsTb4b4b4(
Te6edf3overlay_idTb4b4b4,
Te6edf3statusTff7b72=Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4,
Te6edf3last_errorTff7b72=Te6edf3codeTb4b4b4,
Te6edf3next_refresh_atTff7b72=Te6edf3next_atTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ff_set_phaseTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3job_idTb4b4b4: Tffa657strTb4b4b4,
Te6edf3phaseTb4b4b4: Tffa657strTb4b4b4,
Te6edf3progressTb4b4b4: Tffa657float Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3job Tff7b72= Tff7b72selfTff7b72.Td2a8ff_jobsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3job_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3jobTb4b4b4:
Tff7b72return
Te6edf3jobTb4b4b4[Ta5d6ff"Ta5d6ffphaseTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3phase
Tff7b72if Te6edf3progress Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3jobTb4b4b4[Ta5d6ff"Ta5d6ffprogressTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3progress
Tff7b72async Tff7b72def Td2a8ff_fetch_nomadnet_jobTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3job_idTb4b4b4: Tffa657strTb4b4b4,
Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4,
Te6edf3overlay_idTb4b4b4: Tffa657intTb4b4b4,
Te6edf3specTb4b4b4: Te6edf3OverlaySourceSpecTb4b4b4,
Te6edf3generationTb4b4b4: Tffa657intTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72async Tff7b72with Tff7b72selfTff7b72.Td2a8ff_source_lockTb4b4b4(Te6edf3overlay_idTb4b4b4)Tb4b4b4:
Tff7b72await Tff7b72selfTff7b72.Td2a8ff_fetch_with_retriesTb4b4b4(
Te6edf3job_idTb4b4b4,
Tff7b72lambdaTb4b4b4: Tff7b72selfTff7b72.Td2a8ff_download_nomadnet_onceTb4b4b4(
Te6edf3job_idTb4b4b4,
Te6edf3identity_hashTb4b4b4,
Te6edf3overlay_idTb4b4b4,
Te6edf3specTb4b4b4,
Te6edf3generationTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ff_fetch_rngit_jobTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3job_idTb4b4b4: Tffa657strTb4b4b4,
Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4,
Te6edf3overlay_idsTb4b4b4: Tffa657listTb4b4b4[Tffa657intTb4b4b4]Tb4b4b4,
Te6edf3specsTb4b4b4: Tffa657listTb4b4b4[Te6edf3OverlaySourceSpecTb4b4b4]Tb4b4b4,
Te6edf3generationsTb4b4b4: Tffa657dictTb4b4b4[Tffa657intTb4b4b4, Tffa657intTb4b4b4]Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e# Lock all sources in id order to avoid deadlocks
Te6edf3locks Tff7b72= Tb4b4b4[Tff7b72selfTff7b72.Td2a8ff_source_lockTb4b4b4(Te6edf3oidTb4b4b4) Tff7b72for Te6edf3oid Tff7b72in Tffa657sortedTb4b4b4(Te6edf3overlay_idsTb4b4b4)Tb4b4b4]
Tff7b72for Te6edf3lock Tff7b72in Te6edf3locksTb4b4b4:
Tff7b72await Te6edf3lockTff7b72.Td2a8ffacquireTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72await Tff7b72selfTff7b72.Td2a8ff_fetch_with_retriesTb4b4b4(
Te6edf3job_idTb4b4b4,
Tff7b72lambdaTb4b4b4: Tff7b72selfTff7b72.Td2a8ff_download_rngit_onceTb4b4b4(
Te6edf3job_idTb4b4b4,
Te6edf3identity_hashTb4b4b4,
Te6edf3overlay_idsTb4b4b4,
Te6edf3specsTb4b4b4,
Te6edf3generationsTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72finallyTb4b4b4:
Tff7b72for Te6edf3lock Tff7b72in Tffa657reversedTb4b4b4(Te6edf3locksTb4b4b4)Tb4b4b4:
Te6edf3lockTff7b72.Td2a8ffreleaseTb4b4b4(Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ff_fetch_with_retriesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3job_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3attempt_fnTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3max_retries Tff7b72= Tff7b72selfTff7b72.Td2a8ff_cfg_intTb4b4b4(Ta5d6ff"Ta5d6ffmap_overlay_max_retriesTa5d6ff"Tb4b4b4)
Te6edf3base_delay Tff7b72= Tff7b72selfTff7b72.Td2a8ff_cfg_intTb4b4b4(Ta5d6ff"Ta5d6ffmap_overlay_retry_delay_secondsTa5d6ff"Tb4b4b4)
Te6edf3last_exc Tff7b72= Tff7b72None
Tff7b72for Te6edf3attempt Tff7b72in Tffa657rangeTb4b4b4(Te6edf3max_retries Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72await Te6edf3attempt_fnTb4b4b4(Tb4b4b4)
Tff7b72return
Tff7b72except Tb4b4b4(Te6edf3GeoValidationErrorTb4b4b4, Te6edf3OverlaySourceParseErrorTb4b4b4) Tff7b72as Te6edf3excTb4b4b4:
T8b949e# Do not retry validation / parse errors
Tff7b72raise Te6edf3exc
Tff7b72except Te6edf3RngitFetchError Tff7b72as Te6edf3excTb4b4b4:
Tff7b72if Te6edf3excTff7b72.Td2a8ffcode Tff7b72in Tb4b4b4(
Ta5d6ff"Ta5d6ffcancelledTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffrngit_tools_unavailableTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffpath_missingTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffpath_traversalTa5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Tff7b72raise
Te6edf3last_exc Tff7b72= Te6edf3exc
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Te6edf3last_exc Tff7b72= Te6edf3exc
Tff7b72if Te6edf3attempt Tff7b72>Tff7b72= Te6edf3max_retriesTb4b4b4:
Tff7b72break
Te6edf3delay Tff7b72= Tffa657minTb4b4b4(T79c0ff120.0Tb4b4b4, Te6edf3base_delay Tff7b72* Tb4b4b4(T79c0ff2Tff7b72*Tff7b72*Te6edf3attemptTb4b4b4)Tb4b4b4)
Te6edf3delay Tff7b72*Tff7b72= T79c0ff0.5 Tff7b72+ Te6edf3randomTff7b72.Td2a8ffrandomTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_set_phaseTb4b4b4(Te6edf3job_idTb4b4b4, Ta5d6ff"Ta5d6ffretry_waitTa5d6ff"Tb4b4b4, Te6edf3progressTff7b72=T79c0ff0.0Tb4b4b4)
Tff7b72await Te6edf3asyncioTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3delayTb4b4b4)
Tff7b72if Te6edf3last_excTb4b4b4:
Tff7b72raise Te6edf3last_exc
Tff7b72raise Tf85149RuntimeErrorTb4b4b4(Ta5d6ff"Ta5d6fffetch_failedTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ff_download_nomadnet_onceTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3job_idTb4b4b4: Tffa657strTb4b4b4,
Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4,
Te6edf3overlay_idTb4b4b4: Tffa657intTb4b4b4,
Te6edf3specTb4b4b4: Te6edf3OverlaySourceSpecTb4b4b4,
Te6edf3generationTb4b4b4: Tffa657intTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3path_timeout Tff7b72= Tff7b72selfTff7b72.Td2a8ff_cfg_intTb4b4b4(Ta5d6ff"Ta5d6ffmap_overlay_path_timeout_secondsTa5d6ff"Tb4b4b4)
Te6edf3transfer_timeout Tff7b72= Tff7b72selfTff7b72.Td2a8ff_cfg_intTb4b4b4(Ta5d6ff"Ta5d6ffmap_overlay_transfer_timeout_secondsTa5d6ff"Tb4b4b4)
Te6edf3job_timeout Tff7b72= Tff7b72selfTff7b72.Td2a8ff_cfg_intTb4b4b4(Ta5d6ff"Ta5d6ffmap_overlay_job_timeout_secondsTa5d6ff"Tb4b4b4)
Te6edf3loop Tff7b72= Te6edf3asyncioTff7b72.Td2a8ffget_running_loopTb4b4b4(Tb4b4b4)
Te6edf3done Tff7b72= Te6edf3asyncioTff7b72.Td2a8ffEventTb4b4b4(Tb4b4b4)
Te6edf3resultTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72def Td2a8ffon_successTb4b4b4(Te6edf3file_nameTb4b4b4: Tffa657strTb4b4b4, Te6edf3payloadTb4b4b4: Tffa657bytesTb4b4b4)Tb4b4b4:
Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3file_name
Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffpayloadTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3payload
Te6edf3loopTff7b72.Td2a8ffcall_soon_threadsafeTb4b4b4(Te6edf3doneTff7b72.Td2a8ffsetTb4b4b4)
Tff7b72def Td2a8ffon_failureTb4b4b4(Te6edf3reasonTb4b4b4: Tffa657strTb4b4b4)Tb4b4b4:
Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3reason
Te6edf3loopTff7b72.Td2a8ffcall_soon_threadsafeTb4b4b4(Te6edf3doneTff7b72.Td2a8ffsetTb4b4b4)
Tff7b72def Td2a8ffon_progressTb4b4b4(Te6edf3pTb4b4b4: Tffa657floatTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_set_phaseTb4b4b4(Te6edf3job_idTb4b4b4, Ta5d6ff"Ta5d6fftransferringTa5d6ff"Tb4b4b4, Te6edf3progressTff7b72=Tffa657floatTb4b4b4(Te6edf3p Tff7b72or T79c0ff0Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffon_phaseTb4b4b4(Te6edf3phaseTb4b4b4: Tffa657strTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_set_phaseTb4b4b4(Te6edf3job_idTb4b4b4, Te6edf3phaseTb4b4b4)
Te6edf3downloader Tff7b72= Tff7b72selfTff7b72.Td2a8ff_file_downloader_factoryTb4b4b4(
Te6edf3destination_hashTff7b72=Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3specTff7b72.Td2a8ffdestination_hashTb4b4b4)Tb4b4b4,
Te6edf3page_pathTff7b72=Te6edf3specTff7b72.Td2a8ffpath_or_repo_pathTb4b4b4,
Te6edf3on_file_download_successTff7b72=Te6edf3on_successTb4b4b4,
Te6edf3on_file_download_failureTff7b72=Te6edf3on_failureTb4b4b4,
Te6edf3on_progress_updateTff7b72=Te6edf3on_progressTb4b4b4,
Te6edf3timeoutTff7b72=Te6edf3transfer_timeoutTb4b4b4,
Te6edf3on_phaseTff7b72=Te6edf3on_phaseTb4b4b4,
Te6edf3reticulumTff7b72=Tff7b72selfTff7b72.Td2a8ffreticulumTb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_active_fetchersTb4b4b4[Te6edf3job_idTb4b4b4] Tff7b72= Te6edf3downloader
Tff7b72tryTb4b4b4:
Tff7b72await Te6edf3asyncioTff7b72.Td2a8ffwait_forTb4b4b4(
Te6edf3downloaderTff7b72.Td2a8ffdownloadTb4b4b4(
Te6edf3path_lookup_timeoutTff7b72=Te6edf3path_timeoutTb4b4b4,
Te6edf3link_establishment_timeoutTff7b72=Te6edf3path_timeoutTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3timeoutTff7b72=Te6edf3job_timeoutTb4b4b4,
Tb4b4b4)
Tff7b72await Te6edf3asyncioTff7b72.Td2a8ffwait_forTb4b4b4(Te6edf3doneTff7b72.Td2a8ffwaitTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3timeoutTff7b72=Te6edf3job_timeoutTb4b4b4)
Tff7b72except Tf85149TimeoutError Tff7b72as Te6edf3excTb4b4b4:
Te6edf3downloaderTff7b72.Td2a8ffcancelTb4b4b4(Tb4b4b4)
Tff7b72raise Te6edf3RngitFetchErrorTb4b4b4(Ta5d6ff"Ta5d6ffjob_timeoutTa5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Tff7b72finallyTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_active_fetchersTff7b72.Td2a8ffpopTb4b4b4(Te6edf3job_idTb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Tff7b72not Te6edf3resultTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72raise Te6edf3RngitFetchErrorTb4b4b4(Tffa657strTb4b4b4(Te6edf3resultTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffrequest_failedTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3payload Tff7b72= Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffpayloadTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3payloadTb4b4b4, Tb4b4b4(Tffa657bytesTb4b4b4, Tffa657bytearrayTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72raise Te6edf3GeoValidationErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid_response_bodyTa5d6ff"Tb4b4b4)
Tff7b72await Tff7b72selfTff7b72.Td2a8ff_commit_bytesTb4b4b4(
Te6edf3job_idTb4b4b4,
Te6edf3identity_hashTb4b4b4,
Te6edf3overlay_idTb4b4b4,
Te6edf3generationTb4b4b4,
Tffa657bytesTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4,
Te6edf3hinted_formatTff7b72=Te6edf3guess_format_from_pathTb4b4b4(Te6edf3specTff7b72.Td2a8ffpath_or_repo_pathTb4b4b4)Tb4b4b4,
Te6edf3resolved_refTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3refresh_intervalTff7b72=Te6edf3specTff7b72.Td2a8ffrefresh_interval_secondsTb4b4b4,
Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ff_download_rngit_onceTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3job_idTb4b4b4: Tffa657strTb4b4b4,
Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4,
Te6edf3overlay_idsTb4b4b4: Tffa657listTb4b4b4[Tffa657intTb4b4b4]Tb4b4b4,
Te6edf3specsTb4b4b4: Tffa657listTb4b4b4[Te6edf3OverlaySourceSpecTb4b4b4]Tb4b4b4,
Te6edf3generationsTb4b4b4: Tffa657dictTb4b4b4[Tffa657intTb4b4b4, Tffa657intTb4b4b4]Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3job_timeout Tff7b72= Tff7b72selfTff7b72.Td2a8ff_cfg_intTb4b4b4(Ta5d6ff"Ta5d6ffmap_overlay_job_timeout_secondsTa5d6ff"Tb4b4b4)
Te6edf3first Tff7b72= Te6edf3specsTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3paths Tff7b72= Tb4b4b4[Te6edf3sTff7b72.Td2a8ffpath_or_repo_path Tff7b72for Te6edf3s Tff7b72in Te6edf3specsTb4b4b4]
Te6edf3fetcher Tff7b72= Tff7b72selfTff7b72.Td2a8ff_rngit_fetcher_factoryTb4b4b4(
Te6edf3work_rootTff7b72=Tff7b72selfTff7b72.Td2a8ffwork_rootTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3reticulum_config_dirTff7b72=Tff7b72selfTff7b72.Td2a8ffreticulum_config_dirTb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_active_fetchersTb4b4b4[Te6edf3job_idTb4b4b4] Tff7b72= Te6edf3fetcher
Tff7b72def Td2a8ffon_phaseTb4b4b4(Te6edf3phaseTb4b4b4: Tffa657strTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_set_phaseTb4b4b4(Te6edf3job_idTb4b4b4, Te6edf3phaseTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3result Tff7b72= Tff7b72await Te6edf3asyncioTff7b72.Td2a8ffwait_forTb4b4b4(
Te6edf3fetcherTff7b72.Td2a8fffetchTb4b4b4(
Te6edf3destination_hashTff7b72=Te6edf3firstTff7b72.Td2a8ffdestination_hashTb4b4b4,
Te6edf3groupTff7b72=Te6edf3firstTff7b72.Td2a8ffgroup_name Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4,
Te6edf3repositoryTff7b72=Te6edf3firstTff7b72.Td2a8ffrepository Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4,
Te6edf3pathsTff7b72=Te6edf3pathsTb4b4b4,
Te6edf3refTff7b72=Te6edf3firstTff7b72.Td2a8ffrefTb4b4b4,
Te6edf3job_idTff7b72=Te6edf3job_idTb4b4b4,
Te6edf3timeout_secondsTff7b72=Te6edf3job_timeoutTb4b4b4,
Te6edf3on_phaseTff7b72=Te6edf3on_phaseTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3timeoutTff7b72=Te6edf3job_timeout Tff7b72+ T79c0ff5Tb4b4b4,
Tb4b4b4)
Tff7b72finallyTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_active_fetchersTff7b72.Td2a8ffpopTb4b4b4(Te6edf3job_idTb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72for Te6edf3oidTb4b4b4, Te6edf3spec Tff7b72in Tffa657zipTb4b4b4(Te6edf3overlay_idsTb4b4b4, Te6edf3specsTb4b4b4, Te6edf3strictTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_generation_currentTb4b4b4(Te6edf3oidTb4b4b4, Te6edf3generationsTb4b4b4[Te6edf3oidTb4b4b4]Tb4b4b4)Tb4b4b4:
Tff7b72continue
Te6edf3payload Tff7b72= Te6edf3resultTff7b72.Td2a8fffilesTff7b72.Td2a8ffgetTb4b4b4(Te6edf3specTff7b72.Td2a8ffpath_or_repo_pathTb4b4b4)
Tff7b72if Te6edf3payload Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_mark_errorTb4b4b4(Te6edf3oidTb4b4b4, Ta5d6ff"Ta5d6ffpath_missingTa5d6ff"Tb4b4b4)
Tff7b72continue
Tff7b72await Tff7b72selfTff7b72.Td2a8ff_commit_bytesTb4b4b4(
Te6edf3job_idTb4b4b4,
Te6edf3identity_hashTb4b4b4,
Te6edf3oidTb4b4b4,
Te6edf3generationsTb4b4b4[Te6edf3oidTb4b4b4]Tb4b4b4,
Te6edf3payloadTb4b4b4,
Te6edf3hinted_formatTff7b72=Te6edf3guess_format_from_pathTb4b4b4(Te6edf3specTff7b72.Td2a8ffpath_or_repo_pathTb4b4b4)Tb4b4b4,
Te6edf3resolved_refTff7b72=Te6edf3resultTff7b72.Td2a8ffresolved_refTb4b4b4,
Te6edf3refresh_intervalTff7b72=Te6edf3specTff7b72.Td2a8ffrefresh_interval_secondsTb4b4b4,
Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ff_commit_bytesTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3job_idTb4b4b4: Tffa657strTb4b4b4,
Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4,
Te6edf3overlay_idTb4b4b4: Tffa657intTb4b4b4,
Te6edf3generationTb4b4b4: Tffa657intTb4b4b4,
Te6edf3payloadTb4b4b4: Tffa657bytesTb4b4b4,
Tff7b72*Tb4b4b4,
Te6edf3hinted_formatTb4b4b4: Tffa657str Tff7b72| Tff7b72NoneTb4b4b4,
Te6edf3resolved_refTb4b4b4: Tffa657str Tff7b72| Tff7b72NoneTb4b4b4,
Te6edf3refresh_intervalTb4b4b4: Tffa657intTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_generation_currentTb4b4b4(Te6edf3overlay_idTb4b4b4, Te6edf3generationTb4b4b4)Tb4b4b4:
Tff7b72return
Te6edf3limits Tff7b72= Tff7b72selfTff7b72.Td2a8fflimitsTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_set_phaseTb4b4b4(Te6edf3job_idTb4b4b4, Ta5d6ff"Ta5d6ffvalidatingTa5d6ff"Tb4b4b4)
Te6edf3validated Tff7b72= Te6edf3validate_geo_bytesTb4b4b4(
Te6edf3payloadTb4b4b4,
Te6edf3hinted_formatTff7b72=Te6edf3hinted_formatTb4b4b4,
Te6edf3max_bytesTff7b72=Te6edf3limitsTb4b4b4[Ta5d6ff"Ta5d6ffmap_overlay_max_bytesTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3max_featuresTff7b72=Te6edf3limitsTb4b4b4[Ta5d6ff"Ta5d6ffmap_overlay_max_featuresTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3max_kmz_uncompressed_bytesTff7b72=Te6edf3limitsTb4b4b4[Ta5d6ff"Ta5d6ffmap_overlay_max_kmz_uncompressed_bytesTa5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Te6edf3digest Tff7b72= Te6edf3hashlibTff7b72.Td2a8ffsha256Tb4b4b4(Te6edf3payloadTb4b4b4)Tff7b72.Td2a8ffhexdigestTb4b4b4(Tb4b4b4)
Te6edf3row Tff7b72= Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8ffget_by_idTb4b4b4(Te6edf3overlay_idTb4b4b4)
Tff7b72if Te6edf3row Tff7b72and Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcontent_sha256Ta5d6ff"Tb4b4b4) Tff7b72== Te6edf3digest Tff7b72and Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcache_relpathTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3abs_existing Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffoverlay_rootTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffcache_relpathTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3abs_existingTb4b4b4)Tb4b4b4:
Te6edf3now Tff7b72= Te6edf3datetimeTff7b72.Td2a8ffnowTb4b4b4(Te6edf3UTCTb4b4b4)
Te6edf3next_at Tff7b72= Tff7b72None
Tff7b72if Te6edf3refresh_interval Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3next_at Tff7b72= Tb4b4b4(Te6edf3now Tff7b72+ Te6edf3timedeltaTb4b4b4(Te6edf3secondsTff7b72=Te6edf3refresh_intervalTb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffisoformatTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8ffupdate_fieldsTb4b4b4(
Te6edf3overlay_idTb4b4b4,
Te6edf3statusTff7b72=Ta5d6ff"Ta5d6ffreadyTa5d6ff"Tb4b4b4,
Te6edf3last_errorTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3last_fetched_atTff7b72=Te6edf3nowTff7b72.Td2a8ffisoformatTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3next_refresh_atTff7b72=Te6edf3next_atTb4b4b4,
Te6edf3resolved_refTff7b72=Te6edf3resolved_ref Tff7b72or Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffresolved_refTa5d6ff"Tb4b4b4)Tb4b4b4,
Tffa657formatTff7b72=Te6edf3validatedTff7b72.Td2a8ffformatTb4b4b4,
Te6edf3byte_sizeTff7b72=Te6edf3validatedTff7b72.Td2a8ffbyte_sizeTb4b4b4,
Tb4b4b4)
Tff7b72return
Te6edf3abs_pathTb4b4b4, Te6edf3rel Tff7b72= Tff7b72selfTff7b72.Td2a8ffcache_path_forTb4b4b4(Te6edf3identity_hashTb4b4b4, Te6edf3overlay_idTb4b4b4, Te6edf3validatedTff7b72.Td2a8ffformatTb4b4b4)
Te6edf3atomic_write_bytesTb4b4b4(Te6edf3abs_pathTb4b4b4, Te6edf3payloadTb4b4b4)
Te6edf3now Tff7b72= Te6edf3datetimeTff7b72.Td2a8ffnowTb4b4b4(Te6edf3UTCTb4b4b4)
Te6edf3next_at Tff7b72= Tff7b72None
Tff7b72if Te6edf3refresh_interval Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3next_at Tff7b72= Tb4b4b4(Te6edf3now Tff7b72+ Te6edf3timedeltaTb4b4b4(Te6edf3secondsTff7b72=Te6edf3refresh_intervalTb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffisoformatTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_generation_currentTb4b4b4(Te6edf3overlay_idTb4b4b4, Te6edf3generationTb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8ffupdate_fieldsTb4b4b4(
Te6edf3overlay_idTb4b4b4,
Te6edf3statusTff7b72=Ta5d6ff"Ta5d6ffreadyTa5d6ff"Tb4b4b4,
Te6edf3last_errorTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3last_fetched_atTff7b72=Te6edf3nowTff7b72.Td2a8ffisoformatTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3next_refresh_atTff7b72=Te6edf3next_atTb4b4b4,
Te6edf3content_sha256Tff7b72=Te6edf3digestTb4b4b4,
Te6edf3resolved_refTff7b72=Te6edf3resolved_refTb4b4b4,
Tffa657formatTff7b72=Te6edf3validatedTff7b72.Td2a8ffformatTb4b4b4,
Te6edf3byte_sizeTff7b72=Te6edf3validatedTff7b72.Td2a8ffbyte_sizeTb4b4b4,
Te6edf3cache_relpathTff7b72=Te6edf3relTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ffcancel_jobTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3job_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3identity_hashTb4b4b4: Tffa657str Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3job Tff7b72= Tff7b72selfTff7b72.Td2a8ff_jobsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3job_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3job Tff7b72or Te6edf3jobTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4) Tff7b72not Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ffrunningTa5d6ff"Tb4b4b4,Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72if Te6edf3identity_hash Tff7b72is Tff7b72not Tff7b72None Tff7b72and Te6edf3jobTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffidentity_hashTa5d6ff"Tb4b4b4) Tff7b72!= Te6edf3identity_hashTb4b4b4:
Tff7b72return Tff7b72False
Te6edf3fetcher Tff7b72= Tff7b72selfTff7b72.Td2a8ff_active_fetchersTff7b72.Td2a8ffgetTb4b4b4(Te6edf3job_idTb4b4b4)
Tff7b72if Te6edf3fetcher Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3fetcherTff7b72.Td2a8ffcancelTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Te6edf3jobTb4b4b4[Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffcancelledTa5d6ff"
Te6edf3jobTb4b4b4[Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffcancelledTa5d6ff"
Tff7b72for Te6edf3oid Tff7b72in Te6edf3jobTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffoverlay_idsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]Tb4b4b4:
Te6edf3row Tff7b72= Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8ffget_by_idTb4b4b4(Te6edf3oidTb4b4b4)
Tff7b72if Te6edf3row Tff7b72and Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffjob_idTa5d6ff"Tb4b4b4) Tff7b72== Te6edf3job_id Tff7b72and Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6fffetchingTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8ffupdate_fieldsTb4b4b4(
Te6edf3oidTb4b4b4,
Te6edf3statusTff7b72=Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4,
Te6edf3last_errorTff7b72=Ta5d6ff"Ta5d6ffcancelledTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72return Tff7b72True
Tff7b72def Td2a8ffpatch_overlayTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4,
Te6edf3overlay_idTb4b4b4: Tffa657intTb4b4b4,
Te6edf3dataTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Te6edf3row Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_overlayTb4b4b4(Te6edf3identity_hashTb4b4b4, Te6edf3overlay_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3rowTb4b4b4:
Tff7b72raise Te6edf3OverlaySourceParseErrorTb4b4b4(Ta5d6ff"Ta5d6ffnot_foundTa5d6ff"Tb4b4b4)
Te6edf3fieldsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72if Ta5d6ff"Ta5d6ffnameTa5d6ff" Tff7b72in Te6edf3data Tff7b72and Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3fieldsTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72= Tffa657strTb4b4b4(Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4[Tb4b4b4:T79c0ff200Tb4b4b4] Tff7b72or Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]
Tff7b72if Ta5d6ff"Ta5d6ffenabledTa5d6ff" Tff7b72in Te6edf3dataTb4b4b4:
Te6edf3fieldsTb4b4b4[Ta5d6ff"Ta5d6ffenabledTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff1 Tff7b72if Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffenabledTa5d6ff"Tb4b4b4] Tff7b72else T79c0ff0
Tff7b72if Ta5d6ff"Ta5d6ffvisibleTa5d6ff" Tff7b72in Te6edf3dataTb4b4b4:
Te6edf3fieldsTb4b4b4[Ta5d6ff"Ta5d6ffvisibleTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff1 Tff7b72if Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffvisibleTa5d6ff"Tb4b4b4] Tff7b72else T79c0ff0
Tff7b72if Ta5d6ff"Ta5d6ffrefresh_interval_secondsTa5d6ff" Tff7b72in Te6edf3dataTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3ri Tff7b72= Tffa657intTb4b4b4(Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffrefresh_interval_secondsTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72except Tb4b4b4(Tf85149TypeErrorTb4b4b4, Tf85149ValueErrorTb4b4b4) Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Te6edf3OverlaySourceParseErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid_refresh_intervalTa5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Tff7b72if Te6edf3ri Tff7b72< T79c0ff0Tb4b4b4:
Tff7b72raise Te6edf3OverlaySourceParseErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid_refresh_intervalTa5d6ff"Tb4b4b4)
Tff7b72if T79c0ff0 Tff7b72< Te6edf3ri Tff7b72< T79c0ff60Tb4b4b4:
Te6edf3ri Tff7b72= T79c0ff60
Te6edf3ri Tff7b72= Tffa657minTb4b4b4(Te6edf3riTb4b4b4, T79c0ff86400Tb4b4b4)
Te6edf3fieldsTb4b4b4[Ta5d6ff"Ta5d6ffrefresh_interval_secondsTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3ri
Tff7b72if Te6edf3ri Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3base Tff7b72= Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fflast_fetched_atTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3baseTb4b4b4:
Te6edf3fieldsTb4b4b4[Ta5d6ff"Ta5d6ffnext_refresh_atTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(
Te6edf3datetimeTff7b72.Td2a8fffromisoformatTb4b4b4(Tffa657strTb4b4b4(Te6edf3baseTb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ffZTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff+00:00Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72+ Te6edf3timedeltaTb4b4b4(Te6edf3secondsTff7b72=Te6edf3riTb4b4b4)
Tb4b4b4)Tff7b72.Td2a8ffisoformatTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3fieldsTb4b4b4[Ta5d6ff"Ta5d6ffnext_refresh_atTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3datetimeTff7b72.Td2a8ffnowTb4b4b4(Te6edf3UTCTb4b4b4)Tff7b72.Td2a8ffisoformatTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3fieldsTb4b4b4[Ta5d6ff"Ta5d6ffnext_refresh_atTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Ta5d6ff"Ta5d6ffrefTa5d6ff" Tff7b72in Te6edf3data Tff7b72and Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffkindTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3KIND_RNGIT_FILESTb4b4b4:
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787map_overlay_sources Tff7b72import Te6edf3normalize_ref
Te6edf3fieldsTb4b4b4[Ta5d6ff"Ta5d6ffrefTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3normalize_refTb4b4b4(Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffrefTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3fieldsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8ffupdate_fieldsTb4b4b4(Te6edf3overlay_idTb4b4b4, Tff7b72*Tff7b72*Te6edf3fieldsTb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ffget_overlayTb4b4b4(Te6edf3identity_hashTb4b4b4, Te6edf3overlay_idTb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Tff7b72def Td2a8ffdelete_overlayTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4, Te6edf3overlay_idTb4b4b4: Tffa657intTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3row Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_overlayTb4b4b4(Te6edf3identity_hashTb4b4b4, Te6edf3overlay_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3rowTb4b4b4:
Tff7b72return Tff7b72False
Te6edf3rel Tff7b72= Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcache_relpathTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3relTb4b4b4:
Te6edf3abs_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffoverlay_rootTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3relTb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3abs_pathTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3abs_pathTb4b4b4)
Tff7b72except Tf85149OSErrorTb4b4b4:
Tff7b72pass
Tff7b72return Tff7b72selfTff7b72.Td2a8ffdatabaseTff7b72.Td2a8ffmap_overlaysTff7b72.Td2a8ffdelete_for_identityTb4b4b4(Te6edf3identity_hashTb4b4b4, Te6edf3overlay_idTb4b4b4)
Tff7b72def Td2a8ffread_cache_bytesTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4,
Te6edf3overlay_idTb4b4b4: Tffa657intTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657tupleTb4b4b4[Tffa657bytesTb4b4b4, Tffa657strTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3row Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_overlayTb4b4b4(Te6edf3identity_hashTb4b4b4, Te6edf3overlay_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3row Tff7b72or Tff7b72not Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcache_relpathTa5d6ff"Tb4b4b4) Tff7b72or Tff7b72not Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffformatTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72None
Te6edf3abs_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffoverlay_rootTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffcache_relpathTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3abs_pathTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72with Tffa657openTb4b4b4(Te6edf3abs_pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3data Tff7b72= Te6edf3fTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3dataTb4b4b4, Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffformatTa5d6ff"Tb4b4b4]
Tff7b72def Td2a8ffexport_overlayTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4,
Te6edf3overlay_idTb4b4b4: Tffa657intTb4b4b4,
Te6edf3target_formatTb4b4b4: Tffa657strTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657tupleTb4b4b4[Tffa657bytesTb4b4b4, Tffa657strTb4b4b4, Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3cached Tff7b72= Tff7b72selfTff7b72.Td2a8ffread_cache_bytesTb4b4b4(Te6edf3identity_hashTb4b4b4, Te6edf3overlay_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3cachedTb4b4b4:
Tff7b72raise Te6edf3OverlayExportErrorTb4b4b4(Ta5d6ff"Ta5d6ffcache_missingTa5d6ff"Tb4b4b4)
Te6edf3dataTb4b4b4, Te6edf3src_fmt Tff7b72= Te6edf3cached
Te6edf3limits Tff7b72= Tff7b72selfTff7b72.Td2a8fflimitsTb4b4b4(Tb4b4b4)
Te6edf3out Tff7b72= Te6edf3convert_overlay_bytesTb4b4b4(
Te6edf3dataTb4b4b4,
Te6edf3source_formatTff7b72=Te6edf3src_fmtTb4b4b4,
Te6edf3target_formatTff7b72=Te6edf3target_formatTb4b4b4,
Te6edf3max_bytesTff7b72=Te6edf3limitsTb4b4b4[Ta5d6ff"Ta5d6ffmap_overlay_max_bytesTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3max_featuresTff7b72=Te6edf3limitsTb4b4b4[Ta5d6ff"Ta5d6ffmap_overlay_max_featuresTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3max_kmz_uncompressed_bytesTff7b72=Te6edf3limitsTb4b4b4[Ta5d6ff"Ta5d6ffmap_overlay_max_kmz_uncompressed_bytesTa5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Te6edf3row Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_overlayTb4b4b4(Te6edf3identity_hashTb4b4b4, Te6edf3overlay_idTb4b4b4)
Te6edf3filename Tff7b72= Te6edf3_safe_filenameTb4b4b4(
Tb4b4b4(Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffoverlayTa5d6ff"Tb4b4b4) Tff7b72if Te6edf3row Tff7b72else Ta5d6ff"Ta5d6ffoverlayTa5d6ff"Tb4b4b4,
Te6edf3EXTENSIONSTb4b4b4[Te6edf3target_formatTb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72return Te6edf3outTb4b4b4, Te6edf3CONTENT_TYPESTb4b4b4[Te6edf3target_formatTb4b4b4]Tb4b4b4, Te6edf3filename
Tff7b72def Td2a8ffexport_manyTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3identity_hashTb4b4b4: Tffa657strTb4b4b4,
Te6edf3overlay_idsTb4b4b4: Tffa657listTb4b4b4[Tffa657intTb4b4b4]Tb4b4b4,
Te6edf3target_formatTb4b4b4: Tffa657strTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657tupleTb4b4b4[Tffa657bytesTb4b4b4, Tffa657strTb4b4b4, Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3overlay_idsTb4b4b4:
Tff7b72raise Te6edf3OverlayExportErrorTb4b4b4(Ta5d6ff"Ta5d6ffmissing_idsTa5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3overlay_idsTb4b4b4) Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffexport_overlayTb4b4b4(Te6edf3identity_hashTb4b4b4, Te6edf3overlay_idsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3target_formatTb4b4b4)
Te6edf3geo_chunksTb4b4b4: Tffa657listTb4b4b4[Tffa657bytesTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3limits Tff7b72= Tff7b72selfTff7b72.Td2a8fflimitsTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3oid Tff7b72in Te6edf3overlay_idsTb4b4b4:
Te6edf3cached Tff7b72= Tff7b72selfTff7b72.Td2a8ffread_cache_bytesTb4b4b4(Te6edf3identity_hashTb4b4b4, Te6edf3oidTb4b4b4)
Tff7b72if Tff7b72not Te6edf3cachedTb4b4b4:
Tff7b72raise Te6edf3OverlayExportErrorTb4b4b4(Ta5d6ff"Ta5d6ffcache_missingTa5d6ff"Tb4b4b4)
Te6edf3dataTb4b4b4, Te6edf3src_fmt Tff7b72= Te6edf3cached
Te6edf3geo_chunksTff7b72.Td2a8ffappendTb4b4b4(Te6edf3to_geojsonTb4b4b4(Te6edf3dataTb4b4b4, Te6edf3src_fmtTb4b4b4)Tb4b4b4)
Te6edf3merged Tff7b72= Te6edf3merge_geojson_bytesTb4b4b4(Te6edf3geo_chunksTb4b4b4)
Te6edf3out Tff7b72= Te6edf3from_geojsonTb4b4b4(Te6edf3mergedTb4b4b4, Te6edf3target_formatTb4b4b4)
Te6edf3max_bytes Tff7b72= Te6edf3limitsTb4b4b4[Ta5d6ff"Ta5d6ffmap_overlay_max_bytesTa5d6ff"Tb4b4b4] Tff7b72* Tffa657maxTb4b4b4(T79c0ff1Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3overlay_idsTb4b4b4)Tb4b4b4)
Te6edf3max_features Tff7b72= Te6edf3limitsTb4b4b4[Ta5d6ff"Ta5d6ffmap_overlay_max_featuresTa5d6ff"Tb4b4b4] Tff7b72* Tffa657maxTb4b4b4(T79c0ff1Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3overlay_idsTb4b4b4)Tb4b4b4)
Te6edf3max_uncomp Tff7b72= Te6edf3limitsTb4b4b4[Ta5d6ff"Ta5d6ffmap_overlay_max_kmz_uncompressed_bytesTa5d6ff"Tb4b4b4] Tff7b72* Tffa657maxTb4b4b4(
T79c0ff1Tb4b4b4,
Tffa657lenTb4b4b4(Te6edf3overlay_idsTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3outTb4b4b4) Tff7b72> Te6edf3max_bytesTb4b4b4:
Tff7b72raise Te6edf3OverlayExportErrorTb4b4b4(Ta5d6ff"Ta5d6fffile_too_largeTa5d6ff"Tb4b4b4)
Te6edf3validate_geo_bytesTb4b4b4(
Te6edf3outTb4b4b4,
Te6edf3hinted_formatTff7b72=Te6edf3target_formatTb4b4b4,
Te6edf3max_bytesTff7b72=Te6edf3max_bytesTb4b4b4,
Te6edf3max_featuresTff7b72=Te6edf3max_featuresTb4b4b4,
Te6edf3max_kmz_uncompressed_bytesTff7b72=Te6edf3max_uncompTb4b4b4,
Tb4b4b4)
Te6edf3filename Tff7b72= Te6edf3_safe_filenameTb4b4b4(Ta5d6ff"Ta5d6ffoverlaysTa5d6ff"Tb4b4b4, Te6edf3EXTENSIONSTb4b4b4[Te6edf3target_formatTb4b4b4]Tb4b4b4)
Tff7b72return Te6edf3outTb4b4b4, Te6edf3CONTENT_TYPESTb4b4b4[Te6edf3target_formatTb4b4b4]Tb4b4b4, Te6edf3filename
Tff7b72def Td2a8ffcleanupTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstop_schedulerTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3job_id Tff7b72in Tffa657listTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_jobsTff7b72.Td2a8ffkeysTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3job Tff7b72= Tff7b72selfTff7b72.Td2a8ff_jobsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3job_idTb4b4b4)
Tff7b72if Te6edf3job Tff7b72and Te6edf3jobTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffrunningTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcancel_jobTb4b4b4(Te6edf3job_idTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_jobsTff7b72.Td2a8ffclearTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_active_fetchersTff7b72.Td2a8ffclearTb4b4b4(Tb4b4b4)
Te6edf3work Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffoverlay_rootTb4b4b4(Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff.workTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Te6edf3workTb4b4b4)Tb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3workTb4b4b4, Te6edf3ignore_errorsTff7b72=Tff7b72TrueTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────